package com.ruoyi.smartcity.park.service.impl;

import com.alibaba.fastjson2.JSONArray;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.smartcity.park.domain.ParkCheweiinfo;
import com.ruoyi.smartcity.park.mapper.ParkCheweiinfoMapper;
import com.ruoyi.smartcity.park.service.IParkCheweiinfoService;
import com.ruoyi.smartcity.traffic.vo.EchartsOptionVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 车位信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-02-27
 */
@Service
public class ParkCheweiinfoServiceImpl implements IParkCheweiinfoService 
{
    @Autowired
    private ParkCheweiinfoMapper parkCheweiinfoMapper;

    /**
     * 查询车位信息
     * 
     * @param id 车位信息主键
     * @return 车位信息
     */
    @Override
    public ParkCheweiinfo selectParkCheweiinfoById(Long id)
    {
        return parkCheweiinfoMapper.selectParkCheweiinfoById(id);
    }

    /**
     * 查询车位信息列表
     * 
     * @param parkCheweiinfo 车位信息
     * @return 车位信息
     */
    @Override
    public List<ParkCheweiinfo> selectParkCheweiinfoList(ParkCheweiinfo parkCheweiinfo)
    {
        return parkCheweiinfoMapper.selectParkCheweiinfoList(parkCheweiinfo);
    }

    /**
     * 新增车位信息
     * 
     * @param parkCheweiinfo 车位信息
     * @return 结果
     */
    @Override
    public int insertParkCheweiinfo(ParkCheweiinfo parkCheweiinfo)
    {
        parkCheweiinfo.setCreateTime(DateUtils.getNowDate());
        return parkCheweiinfoMapper.insertParkCheweiinfo(parkCheweiinfo);
    }

    /**
     * 修改车位信息
     * 
     * @param parkCheweiinfo 车位信息
     * @return 结果
     */
    @Override
    public int updateParkCheweiinfo(ParkCheweiinfo parkCheweiinfo)
    {
        parkCheweiinfo.setUpdateTime(DateUtils.getNowDate());
        return parkCheweiinfoMapper.updateParkCheweiinfo(parkCheweiinfo);
    }

    /**
     * 批量删除车位信息
     * 
     * @param ids 需要删除的车位信息主键
     * @return 结果
     */
    @Override
    public int deleteParkCheweiinfoByIds(Long[] ids)
    {
        return parkCheweiinfoMapper.deleteParkCheweiinfoByIds(ids);
    }

    /**
     * 删除车位信息信息
     * 
     * @param id 车位信息主键
     * @return 结果
     */
    @Override
    public int deleteParkCheweiinfoById(Long id)
    {
        return parkCheweiinfoMapper.deleteParkCheweiinfoById(id);
    }

    @Override
    public  Map<String, List<ParkCheweiinfo>> cheweiIndex() {
        List<ParkCheweiinfo> list = parkCheweiinfoMapper.selectParkCheweiinfoList(new ParkCheweiinfo());
        // 分组 qyName
        Map<String, List<ParkCheweiinfo>> map = list.stream().collect(Collectors.groupingBy(ParkCheweiinfo::getQyName));
        return map;
    }

    @Override
    public EchartsOptionVO cheweiQy(ParkCheweiinfo parkCheweiinfo) {

        List<ParkCheweiinfo> list = parkCheweiinfoMapper.selectParkCheweiinfoList(new ParkCheweiinfo());
        // 分组 qyName
        Map<String, List<ParkCheweiinfo>> map = list.stream().collect(Collectors.groupingBy(ParkCheweiinfo::getQyName));
        EchartsOptionVO vo = new EchartsOptionVO();
        JSONArray yData = new JSONArray();
        JSONArray xData = new JSONArray();
        for (Map.Entry<String, List<ParkCheweiinfo>> entry : map.entrySet()) {
            xData.add(entry.getKey());
            yData.add(entry.getValue().size());
        }
        vo.setYData(yData);
        vo.setXData(xData);
        return vo;
    }

    @Override
    public List<Map<String, Object>> cheweiStatus() {
        List<Map<String, Object>> vo = new ArrayList<>();

        List<ParkCheweiinfo> list = parkCheweiinfoMapper.selectParkCheweiinfoList(new ParkCheweiinfo());
        // 根据状态分组
        Map<String, List<ParkCheweiinfo>> map = list.stream()
                .filter(item -> item.getState() != null)
                .collect(Collectors.groupingBy(ParkCheweiinfo::getState));
        for (Map.Entry<String, List<ParkCheweiinfo>> entry : map.entrySet()) {
            Map<String, Object> map1 = new HashMap<>();
            map1.put("name", entry.getKey());
            map1.put("value", entry.getValue().size());
            vo.add(map1);
        }
        return vo;
    }
}
